package com.itfenghuang.day03;

public class A02_多态下 {
    public static void main(String[] args) {
        /**polymorphism
         * 1.多态前提条件
         *      有继承关系
         *      重写方法
         *      父类引用指向子类对象
         * 2.如果想要animal 使用抓老鼠功能
         *  用猫对象调用
         *  向下转型:  父类型转子类型  强制类型转换
         *  向上转型:  子类型转父类型  自动
         *      基本类型中的隐视转换和强制类型转换
         *
         * instanceof 关键字
         *      判断左边的对象是否是右边的类型
         *      animal1 instanceof  Cat
         *      如果是会返回true,如果不是会返回false
         *      为了规避在进行向下转型的时候,有可能出现类型转换异常
         *
         */
        Animal animal= new Cat();
        animal.eat();
        //强制转换
//        Cat cat=(Cat)animal;
//        cat.catchmouse();
//        ((Cat)animal).catchmouse();

        Animal animal1=new Dog();
        ((Dog)animal1).lookHome();
        //写代码一定要避免异常发生
        if (animal1 instanceof  Cat){
            Cat cat1=(Cat)animal1;
        }
        boolean b = animal1 instanceof Cat;
        System.out.println("animal1:"+b);
        if (animal instanceof Cat){
            Cat cat=(Cat)animal;
            boolean result = animal instanceof Cat;
            System.out.println(result);
        }
    }
}
class Animal{
    public void eat(){
        System.out.println("吃饭");
    }
}
class Cat extends  Animal{
    public void eat(){
        System.out.println("猫吃鱼");
    }
    public  void catchmouse(){
        System.out.println("抓老鼠");
    }
}
class Dog extends Animal{
    public void eat(){
        System.out.println("啃骨头");
    }
    public void lookHome(){
        System.out.println("看家");
    }
}